前言
tcp四元组:源IP,源端口,目标IP,目标端口;用于唯一标识一条tcp连接。目标IP(服务器IP)和目标端口(例如:80)都是固定的,当建立连接的时候,客户端操作系统都会随机的分配一个未使用的端口,用于建立tcp连接,众所周知,一个tcp报文头使用2个字节来传输源端口(也就是说端口的最大范围0-65535);去掉常用的端口,对于客户端操作系统可随机分配的端口大概只有64K左右,当然也要看操作系统的限制(可通过调整内核参数进行修改)。那么,基于这一理论,代理服务器是如何做到动不动就号称并发几十万的呢?(如:F5硬件负载均衡机等),明显代理机可用端口最大也只有65535。要突破端口的限制,就必须为代理机分配多个内网IP,这样通过扩展绑定到代理机IP的个数,来扩大客户端可分配端口数(比如:基于tcp四元组唯一性原则,代理机上绑定了两个Lan Ip,那么端口数就有130K左右了)。所以,F5负载均衡服务器一般都是绑定了多个内网IP的,同样,我们也可以让部署haproxy的软负载均衡机绑定多个内网IP,提升并发连接数。
相关配置
代理服务器绑定IP及端口范围
10.116.84.115:1025–65000
10.116.84.116:1025–65000后端应用服务器IP及端口
10.116.84.117:800
10.116.84.118:800haproxy配置
frontend http-in
bind *:80
log global
default_backend servers_app
backend servers_app
mode http
balance roundrobin
option httpchk GET /lpp-web/monitor.html
server tomcat117 10.116.84.117:800 check source 10.116.84.115:1025–65000 weight 1
server tomcat118 10.116.84.118:800 check source 10.116.84.116:1025–65000 weight 1
总结
代理服务器并发连接数,并不是只受代理机端口的限制,还受限于操作系统对单进程可打开的最大文件描述符fd的限制,不过这些可通过调整内核参数进行修改,默认为65535,操作系统可分配的最大文件描述符是跟内存大小直接相关的,因为文件描述符fd仅仅只是指向内存数据结构的一个句柄,数据结构中包含发送缓冲区,接收缓冲区等,真正影响文件描述符个数的是总内存大小,数据结构的大小等;socket连接,对文件的操作等都会占用文件描述符fd。